package com.blb.mvc.controller;

import com.blb.mvc.entity.User;
import com.blb.mvc.entity.UserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Map;

/**
 * 用户控制器
 */
@Controller
public class UserController {

    //用于访问登录页面
    @RequestMapping("/toLogin")
    public String toLogin(){
        return "login";
    }

    /**
     * 处理参数方法1： 定义参数名和表单的name一致
     * @return
     */
    @RequestMapping(value = "login",method = RequestMethod.POST)
    public String handleLogin(String username, String password, Model model,
                              HttpSession session){
        System.out.println(username + "---" + password);
        //模拟账号和密码的验证
        if(!"admin".equals(username) || !"123456".equals(password)){
            //返回数据到页面上
            model.addAttribute("message","账号或密码错误");
            //请求转发
            return "forward:/login2";
        }
        //登录成功，将用户信息保存到session中
        User user = new User(username,password);
        session.setAttribute("user",user);
        //重定向
        return "redirect:/toHello";
    }

    /**
     * 处理参数方法2： 定义参数名和表单的name不一致，通过@RequestParam配置表单参数名
     * @return
     */
    @RequestMapping(value = "login2",method = RequestMethod.POST)
    public String handleLogin2(@RequestParam("username") String name,
                               //带默认值的参数
                               @RequestParam(value = "password",required = false,defaultValue = "123") String pwd){
        System.out.println("这是login2");
        System.out.println(name + "---" + pwd);
        return "login";
    }

    /**
     * 处理参数方法3： 使用对象获得参数值，属性名必须和表单name一致
     * @return
     */
    @RequestMapping(value = "login3",method = RequestMethod.POST)
    public String handleLogin3(User user){
        System.out.println(user);
        return "login";
    }

    /**
     * 处理参数方法4： 通过路径携带，使用@PathVariable
     * @return
     */
    @RequestMapping("/login4/{user}/{password}")
    public String handleLogin4(@PathVariable("user") String username,@PathVariable String password){
        System.out.println(username + "---" + password);
        return "login";
    }

    /**
     * 处理参数方法5： 通过Map处理
     * 表单name=users['username']
     * @return
     */
    @RequestMapping("/login5")
    public String handleLogin5(UserVO userVO){
        System.out.println(userVO.getUsers());
        return "login";
    }

    /**
     * 处理参数方法6： 通过List处理
     * 表单name=users[0]
     * @return
     */
    @RequestMapping("/login6")
    public String handleLogin6(UserVO userVO){
        System.out.println(userVO.getUsers());
        return "login";
    }

    /**
     * 处理参数方法7： 通过ServletHttpRequest处理
     * @return
     */
    @RequestMapping("/login7")
    public String handleLogin7(HttpServletRequest request){
        System.out.println(request.getParameter("username"));
        System.out.println(request.getParameter("password"));
        return "login";
    }
}
